home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / bin / eselect < prev    next >
Text File  |  2006-04-12  |  6KB  |  197 lines

  1. #!/bin/bash
  2.  
  3. # Copyright (c) 2005 Gentoo Foundation.
  4. # $Id: eselect.in 242 2005-11-01 02:52:35Z ciaranm $
  5. # This file is part of the 'eselect' tools framework.
  6. #
  7. # eselect is free software; you can redistribute it and/or modify it under the
  8. # terms of the GNU General Public License as published by the Free Software
  9. # Foundation; either version 2 of the License, or (at your option) any later
  10. # version.
  11. #
  12. # eselect is distributed in the hope that it will be useful, but WITHOUT ANY
  13. # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  14. # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License along with
  17. # eselect; if not, write to the Free Software Foundation, Inc., 59 Temple
  18. # Place, Suite 330, Boston, MA  02111-1307  USA
  19.  
  20. # Where is our data?
  21. ESELECT_DATA_PATH="/usr/share/eselect/"
  22.  
  23. # Look in these places for modules
  24. ESELECT_MODULES_PATH=( \
  25.     "${HOME}/.eselect/modules" \
  26.     "${ESELECT_DATA_PATH}/modules" )
  27.  
  28. # Look in this place for libraries
  29. ESELECT_CORE_PATH="${ESELECT_DATA_PATH}/libs"
  30.  
  31. # Look here for the default contents of a module
  32. ESELECT_DEFAULT_ACTIONS="${ESELECT_CORE_PATH}/default.eselect"
  33.  
  34. # Our program name and version
  35. ESELECT_VERSION="1.0"
  36. ESELECT_PROGRAM_NAME="eselect"
  37.  
  38. # Invokation information
  39. ESELECT_BINARY_NAME="${0}"
  40. ESELECT_KILL_TARGET="$$"
  41.  
  42. # Global options
  43. ESELECT_KNOWN_OPTIONS="no-colour no-color"
  44. ESELECT_OPTIONS=""
  45.  
  46. shopt -s extglob
  47. shopt -s expand_aliases
  48.  
  49. # Load core functions
  50. source "${ESELECT_CORE_PATH}/core.bash" || exit 255
  51. # Load necessary functions for the main script
  52. inherit manip output path-manipulation tests
  53.  
  54. # Sneaky trick to make die in subshells work. If you don't get
  55. # it, don't ask...
  56. trap 'echo "exiting." ; exit 250' 15
  57.  
  58. # ec_find_module foo
  59. # Find and echo the filename of the foo module. If there's no foo module,
  60. # die.
  61. ec_find_module() {
  62.     local modname="$1" modpath="" modfile=""
  63.     [[ -z ${modname} ]] && die "Usage: ${FUNCNAME} <module>"
  64.     for modpath in "${ESELECT_MODULES_PATH[@]}" ; do
  65.         [[ -f ${modpath}/${modname}.eselect ]] && break
  66.     done
  67.  
  68.     modfile="${modpath}/${modname}.eselect"
  69.     [[ -r ${modfile} ]] || die -q "Can't load module ${modname}"
  70.     echo ${modfile}
  71. }
  72.  
  73. # ec_do_usage
  74. # Display eselect usage
  75. ec_do_usage() {
  76.     echo "Usage: eselect <global options> <module name> <module options>"
  77. }
  78.  
  79. # ec_do_help
  80. # Display eselect help
  81. ec_do_help() {
  82.     ec_do_usage
  83.     echo
  84.     ec_do_list-options
  85.     echo
  86.     ec_do_list-modules
  87. }
  88.  
  89. # ec_do_version
  90. # Display eselect version
  91. ec_do_version() {
  92.     echo "eselect ${ESELECT_VERSION}"
  93.     echo
  94.     echo "Copyright (c) 2005 Gentoo Foundation. Distributed under the"
  95.     echo "terms of the GNU General Public License v2."
  96. }
  97.  
  98. # ec_do_list-options
  99. # Display all recognized global options
  100. ec_do_list-options() {
  101.     write_list_start "Global options:"
  102.     write_kv_list_entry "--no-color,--no-colour"    "Disable coloured output"
  103. }
  104.  
  105. # ec_do_list-modules
  106. # Display all available eselect modules
  107. ec_do_list-modules() {
  108.     local path file module name desc
  109.  
  110.     write_list_start "Built-in modules:"
  111.     write_kv_list_entry "help"          "Display a help message"
  112.     write_kv_list_entry "list-modules"  "Find and display available modules"
  113.     write_kv_list_entry "usage"         "Display a usage message"
  114.     write_kv_list_entry "version"       "Display version information"
  115.  
  116.     extra_modules=()
  117.     for path in "${ESELECT_MODULES_PATH[@]}" ; do
  118.         [[ -d ${path} ]] || continue
  119.         for file in ${path}/*.eselect ; do
  120.             [[ -f ${file} ]] || continue
  121.             extra_modules=( ${extra_modules[@]} "${file}" )
  122.         done
  123.     done
  124.  
  125.     if [[ ${#extra_modules[@]} -gt 0 ]] ; then
  126.         echo
  127.         write_list_start "Extra modules:"
  128.         for module in ${extra_modules[@]} ; do
  129.             name=${module##*/}
  130.             name=${name%%.eselect}
  131.             desc=$(
  132.                 source "$ESELECT_DEFAULT_ACTIONS" 2>/dev/null \
  133.                     || die "Couldn't source ${ESELECT_DEFAULT_ACTIONS}"
  134.                 source "${module}" 2>/dev/null \
  135.                     || die "Couldn't source ${module}"
  136.                 echo "${DESCRIPTION}"
  137.             )
  138.             write_kv_list_entry "${name}" "${desc}"
  139.         done
  140.     fi
  141. }
  142.  
  143. ### main code ###
  144.  
  145. # figure out what the action is. we need to know whether we're
  146. # invoked as a something-config/something-update.
  147. action=""
  148.  
  149. for suffix in config update{,r} tool manager reader ; do
  150.     if [[ ${0%%-${suffix}} != ${0} ]] ; then
  151.         action=$(basename "${0}" )
  152.         action=${action%%-${suffix}}
  153.         break
  154.     fi
  155. done
  156. unset suffix
  157.  
  158. if [[ -z ${action} ]] ; then
  159.     binname=$(basename "${0}" )
  160.     for prefix in config update{,r} manage 'read' ; do
  161.         if [[ ${binname##${prefix}-} != ${binname} ]] ; then
  162.             action=$(basename "${0}" )
  163.             action=${action##${prefix}-}
  164.             break
  165.         fi
  166.     done
  167.     unset binname prefix
  168. fi
  169.  
  170. if [[ -z ${action} ]] && [[ -n ${1##--} ]] ; then
  171.     while [[ ${1##--} != ${1} ]] ; do
  172.         has ${1##--} "${ESELECT_KNOWN_OPTIONS[@]}" || \
  173.             die -q "Unknown option ${1}!"
  174.         case ${1##--} in
  175.             no-colour|no-color)
  176.                 ESELECT_OPTIONS=(${ESELECT_OPTIONS[@]} "NOCOLOUR")
  177.                 nocolours
  178.                 shift
  179.                 ;;
  180.         esac
  181.     done
  182.     action=${1}
  183.     shift
  184. fi
  185.  
  186. if [[ -n "${action}" ]] ; then
  187.     if is_function "ec_do_${action}" ; then
  188.         ec_do_${action} "${@}"
  189.     else
  190.         do_action "${action}" "${@}"
  191.     fi
  192. else
  193.     ec_do_help
  194. fi
  195.  
  196. # vim: set sw=4 et sts=4 tw=80 :
  197.